package core;

import utils.Utils;
import view.FunctionMenu;
import view.ViewManager;

public class Order
{
    public static final int STATE_NEW = 1;
    public static final int STATE_PERFORMING = 2;
    public static final int STATE_PERFORMED = 3;
    public static final int STATE_TAKEN = 4;
    public static final int STATE_MISSED = 5;
    public static final int STATE_CANCELLED = 6;

    
	//Данные класса
	protected int orderID;
	protected byte clientType;//0 - случайный,1- постоянный
	protected long date;//Дата подачи заказа
	protected double fare;//Цена поездки
	protected String dispatcherName;//Имя диспетчера
	protected String phoneNumber;//Телефон заказчика
	protected String address;//Массив адресов
	protected int count;//Количество элементов в массиве адресов
	protected String comments;
	protected String region;
	protected double bonusSum;
	protected String flat;
	protected String parade;
	protected String building;
	protected int status;//Статус заказа,1 - новый,2 - выполняется,3 - выполненный,4 - заказ взят,но еще не подтвержден диспетчером,5 - пропущенный;6 - отмененный
        //Данные для автоудаления заказа
	protected long reciveTime; //Время получения заказа
	protected int N;           //Номер типа заказа
        protected boolean efirOrder;
        protected String partnerPreffix;
	protected String signed;
        protected boolean isDriverSigned;
        protected int autoTariffClassUID;
        protected String folder;
        
	//Методы класса
	public Order(int _orderID)
	{
            orderID = _orderID;
            clientType = 0;
            status = STATE_NEW;
            reciveTime = System.currentTimeMillis();
            N = 1;
            comments = "";
            region = "";
            bonusSum = 0;
            flat = "";
            parade = "";
            building = "";
            efirOrder = false;
            partnerPreffix = "";
            signed = "";
            isDriverSigned = false;
            autoTariffClassUID = -1;
            folder = "";
	}
	
	public Order(byte[] data)
	{
            N = 0;
            reciveTime = 0;
            folder = "";
            byte[] temp;
            int index,size;
            String strTemp;
            index = 1;
            //orderID
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            orderID = Utils.byteToInt(temp);
            //clientType
            clientType = data[index++];
            //date
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            strTemp = Utils.byteToString(temp);
            date = Long.parseLong(strTemp);
            //fare
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            strTemp = Utils.byteToString(temp);
            fare = Double.parseDouble(strTemp);
            //dispatcherName
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            dispatcherName = Utils.byteToString(temp);
            //phoneNumber
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            phoneNumber = Utils.byteToString(temp);
            //address
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            address = new String(temp);
            //count
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            count = Utils.byteToInt(temp); 
            //status
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            status = Utils.byteToInt(temp);
            //comments
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            comments = Utils.byteToString(temp);
            //bonusSum
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            try
            {
                    bonusSum = Double.parseDouble(Utils.byteToString(temp));
            }catch(Exception e){bonusSum = 0;}
            //region
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            region = Utils.byteToString(temp);
            //flat
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            flat = Utils.byteToString(temp);
            //parade
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            parade = Utils.byteToString(temp);
            //building
            temp = new byte[4];
            for (int i=0;i<4;i++)
            {
                    temp[i] = data[index++];
            }
            size = Utils.byteToInt(temp);
            temp = new byte[size];
            for (int i=0;i<size;i++)
            {
                    temp[i] = data[index++];
            }
            building = Utils.byteToString(temp);
            //partnerPreffix
            partnerPreffix = "";
            try
            {
                temp = new byte[4];
                for (int i=0;i<4;i++)
                {
                    temp[i] = data[index++];
                }
                size = Utils.byteToInt(temp);

                if (size > 0)
                {
                    temp = new byte[size];
                    for (int i=0;i<size;i++)
                    {
                        temp[i] = data[index++];
                    }
                    partnerPreffix = Utils.byteToString(temp);
                }

                //autoTariffClassUID
                temp = new byte[4];
                for (int i=0;i<4;i++)
                {
                        temp[i] = data[index++];
                }
                autoTariffClassUID = Utils.byteToInt(temp);
                
                for (int i=0;i<4;i++)
                {
                        temp[i] = data[index++];
                }
                size = Utils.byteToInt(temp);
                temp = new byte[size];
                for (int i=0;i<size;i++)
                {
                        temp[i] = data[index++];
                }
                folder = Utils.byteToString(temp);
                
            } catch(Exception e){}

            efirOrder = false;            
            
            //������ ������
            temp = null;
            System.gc();
	}

        public String getFolder() 
        {
            return folder;
        }

        public void setFolder(String folder) 
        {
            this.folder = folder;
        }
        
        public void setOrderID(int id)
        {
            orderID = id;
        }
        
	public void setRegion(String newRegion)
	{
		region = newRegion;
	}
	
	public String getRegion()
	{
            return region;
	}
	
	public void setBonusSum(double newBonus)
	{
		bonusSum = newBonus;
	}
	
	public String getBonusSum()
	{
            if (bonusSum>0)
            {
                    return Double.toString(bonusSum);
            }
            else
            {
                    return "";
            }
	}

        public boolean isNewEfirOrder()
        {
            return (status == STATE_NEW && N == 3);
        }

	public int getN()
	{
		return N;
	}
	
	public void setN(int newN)
	{
		if ((newN>3)||(newN<1))
		{
			newN = 3;
		}
		N = newN;
                if (N==3)
                {
                    efirOrder = true;
                }
                else
                {
                    efirOrder = false;
                }
	}
	
	public int getOrderID()
	{
		return orderID;
	}
	
	public void setClientType(int type) 
	{
		if (type==1)
		{
			clientType = 1;
		}
		else
		{
			clientType = 0;
		}
	}
	
	public void setClientType(String type)
	{
		if (type.equals("Patron"))
		{
			clientType = 1;
		}
		else
		{
			clientType = 0;
		}
	}
	
	public int getClientType()
	{
		return clientType;
	}
	
	public String getClientTypeString()
	{
		if (clientType==1)
		{
			return "Постоянный";
		}
		else
		{
			return "Случайный";
		}
	}
	
	public void setDate(long newDate)
	{
		date = newDate;
	}
	
	public long getDate()
	{
		return date;
	}
	
	public void setFare(double newFare)
	{
		fare = newFare;
	}
	
	public double getFare()
	{
		return fare;
	}
	
	public void setDispatcherName(String newName)
	{
		dispatcherName = newName;
	}
	
	public String getDispatcherName()
	{
		return dispatcherName;
	}
	
	public void setPhoneNumber(String newPhone)
	{
		phoneNumber = newPhone;
	}
	
	public String getPhoneNumber()
	{
		return phoneNumber;
	}
	
	public void setAddress(int newCount,String newAddress)
	{
		count = newCount;
		address = newAddress;
	}

        public String getRawAdress()
        {
            return address;
        }

        public int getAddressCount()
        {
            return count;
        }
	
	public String[] getAddress()
	{
		String[] res;
		
		if (address==null)
		{
			res = new String[1];
			res[0] = "";
			return res;
		}
		
		
		byte[] data,temp;
		int index,size;
		res = new String[count];
		data = address.getBytes();
		index = 0;
		for(int j=0;j<count;j++)
		{
			temp = new byte[4];
			for (int i=0;i<4;i++)
			{
				temp[i] = data[index++];
			}
			size = Utils.byteToInt(temp);
			temp = new byte[size];
			for (int i=0;i<size;i++)
			{
				temp[i] = data[index++];
			}
			res[j] = Utils.byteToString(temp);
		}
		return res;
	}
	
	public int getStatus()
	{
		return status;
	}
	
	public void setStatus(int newStatus)
	{
		status = newStatus;
	}
	
	public byte[] toByte()
	{
		byte[] res,temp;
		int size,index;
		//Определяем размер пакета
		String strDate,strFare,strBonus;
		strDate = Long.toString(date);
		strFare = Double.toString(fare);
		strBonus = Double.toString(bonusSum);
		size = 1 + 4 + 1 + Utils.getStringSize(strDate) + Utils.getStringSize(strFare) + Utils.getStringSize(dispatcherName)
			+ Utils.getStringSize(phoneNumber) + 4 + address.getBytes().length + 4 + 4 + Utils.getStringSize(comments)
			+ Utils.getStringSize(strBonus) + Utils.getStringSize(region) + Utils.getStringSize(flat) + Utils.getStringSize(parade)
                        + Utils.getStringSize(building) + Utils.getStringSize(partnerPreffix) + 4 + Utils.getStringSize(folder);
		//Создаем массив
		res = new byte[size];
		//заполняем массив
		index = 0;
		res[index++] = 1;
		//OrderID
		temp = Utils.int32ToByte(orderID);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//clientType
		res[index++] = clientType;
		//date
		temp = Utils.getStringByte(strDate);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//fare
		temp = Utils.getStringByte(strFare);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//dispatcherName
		temp = Utils.getStringByte(dispatcherName);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//phoneNumber
		temp = Utils.getStringByte(phoneNumber);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//address
		temp = Utils.int32ToByte(address.getBytes().length);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		temp = address.getBytes();
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//count
		temp = Utils.int32ToByte(count);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//status
		temp = Utils.int32ToByte(status);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//comments
		temp = Utils.getStringByte(comments);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//bonusSum
		temp = Utils.getStringByte(strBonus);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//Region
		temp = Utils.getStringByte(region);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//flat
		temp = Utils.getStringByte(flat);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//parade
		temp = Utils.getStringByte(parade);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
		//building
		temp = Utils.getStringByte(building);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
                //partnerPreffix
                temp = Utils.getStringByte(partnerPreffix);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
                //autoTariffClassUID
                temp = Utils.int32ToByte(autoTariffClassUID);
                for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
                
                //folder
                temp = Utils.getStringByte(folder);
		for (int i=0;i<temp.length;i++)
		{
			res[index++] = temp[i];
		}
                
		//Удаляем ненужные объекты
		temp = null;
		System.gc();
		return res;
	}
	
	public boolean isDeleted(int[] T)
	{
		if ((status==STATE_NEW)&&((System.currentTimeMillis()-reciveTime)>T[N-1]))
		{
			return true;
		}
		else
		{
			return false;
		}	
	}
	
	public boolean isTooOld(int[] T)
	{
		if (status==STATE_NEW)
		{
			if ((System.currentTimeMillis()-reciveTime)>T[N-1])
			{
				if (N!=3)//Если заказ не из эфира - сохраняем как проигнорированный
				{
					status = STATE_MISSED;
					return false;
				}
				else
				{
					return true;
				}
			}
			else
			{
				return false;
			}
		}
		else
		{
			return false;
		}
	}
	
	public void setComments(String newComments)
	{
		comments = newComments;
	}
	
	public String getComments()
	{
		return comments;
	}
	
	public String getFlat()
	{
		return flat;
	}
	
	public void setFlat(String newFlat)
	{
		flat = newFlat;
	}
	
	public String getParade()
	{
		return parade;
	}
	
	public void setParade(String newParade)
	{
		parade = newParade;
	}
	
	public String getBuilding()
	{
		return building;
	}
	
	public void setBuilding(String newBuilding)
	{
		building = newBuilding;
	}

        public boolean isEfirOrder()
        {
            return efirOrder;
        }

        public void setPartnerPreffix(String newValue)
        {
            partnerPreffix = newValue;
        }

        public String getPartnerPreffix()
        {
            return partnerPreffix;
        }

        public String getSigned()
        {
            return signed;
        }

        public void setSigned(String value)
        {
            signed = value;
        }

    public boolean isDriverSigned() {
        return isDriverSigned;
    }

    public void setIsDriverSigned(boolean isDriverSigned) {
        this.isDriverSigned = isDriverSigned;
    }
        
        
        
        public String getAutoClass()
        {
            return "";
        }

    public int getAutoTariffClassUID()
    {
        return autoTariffClassUID;
    }

    public void setAutoTariffClassUID(int autoTariffClassUID)
    {
        this.autoTariffClassUID = autoTariffClassUID;
    }
    
    public String getShortDescription()
    {
        String[] temp = getAddress();

        String result = formatPreffix(getPartnerPreffix());
        if (getFare() >= 0)
        {
            result += ((temp.length>0) ? temp[0] : "") + "["+getFare()+"грн]";
        }
        else
        {
            result += ((temp.length>0) ? temp[0] : "") + "[без суммы]";
        }
        
        return result;
    }
    
    public String getPreOrderDetails()
    {
        String[] temp = getAddress();
        
        String result = (temp.length > 0 ? temp[0] : "");
        //Добавляем остальные адреса
        for (int i = 1; i < temp.length; ++i)
        {
            if (!temp[i].equals(""))
            {
                result += ">" + temp[i];
            }
        }
        result +=  "\n";    
        result += "Дата: " + Utils.dateToDateString(getDate()) + "\n";
        result += "Время: " + Utils.dateToTimeString(getDate()) + "\n";
        result += "Подписались: " + getSigned() + "\n";
        result += "Цена: " + Double.toString(getFare()) + "\n";

        return result;
    }
    
    protected String getChernovtsiDetailsText()
    {    
        if (folder.equals("Автопоиск"))
        {
            return getChernovtsiDetailsTextEfir(); 
        } 
        else if (folder.equals("Входящий") || folder.equals("НаОформлении") || folder.equals("Принятый"))
        {
            return getChernovtsiDetailsText("Ждите! Заказ на оформлении"); 
        }
        else if (folder.equals("Направленный") || folder.equals("Исполняемый"))
        {
            return getChernovtsiDetailsText("Выполняйте заказ"); 
        }
        else
        {
            return getChernovtsiDetailsText(folder); 
        }
    }
    
    protected String formatExtraData()
    {
        String result = "";
        
        //Квартира
        if (!flat.equals(""))
        {
            if (Utils.isNumber(flat.charAt(0)))
            {
                result += ",кв" + flat;
            }
            else
            {
                result += ","+flat;
            }
        }
        //Строение
        if (!building.equals(""))
        {
            if (Utils.isNumber(building.charAt(0)))
            {
                result += ",корп" + building;
            }
            else
            {
                result += "," + building;
            }
        }          
        //Парадная
        if (!parade.equals(""))
        {
            if (Utils.isNumber(parade.charAt(0)))
            {
                result += ",под" + parade;
            }
            else
            {
                result += "," + parade;
            }
        }
        
        return result;
    }
    
    protected String getChernovtsiDetailsTextEfir()
    {
        String result = "";
        
        //Адрес подачи
        String[] tmp = getAddress();
        result += Utils.replace((tmp.length > 0 ? tmp[0] : "") + formatExtraData(), "\n", "|") + "\n";
        
        //Регион
        result += Utils.replace(region, "\n", "|") + "\n";

        //Куда
        result += "\n";
        
        //класс заказа
        result += Utils.replace(getAutoClass(), "\n", "|") + "\n"; 

        //Cтоимость заказа
        
        if (fare >= 0)
        {
            result += Double.toString(fare) + " грн";
            String bonusSumStr = getBonusSum();
            if (!bonusSumStr.equals("") && getStatus() != STATE_NEW)
            {
                result += " в офисе " + bonusSum + " грн";
            }
            result += "\n";
        }
        else
        {
            result += "Без суммы\n";
        }
        
        //Примечание
        result += Utils.replace(comments, "\n", "|") + "\n";
           
        //Доп услуги
        result += Utils.replace(getFeatures(), "\n", "|") + "\n";
        
        //Статус заказа
        result += "Автопоиск\n";
        
        //Время
        result += Utils.dateToTimeString(getDate()) + "\n";
        
        return result;
    }
    
//    private String getFormatedRegionChernovtsi() 
//    {
//        if (!folder.equals("Автопоиск") && !folder.equals("Входящий") && !getRegion().equals(""))
//        {
//           return (" (" + getRegion() + ")"); 
//        }
//        
//        return "";
//    }
    
    protected String getChernovtsiDetailsText(String statusStr)
    {
        String result = "";

        //Адрес подачи
        String[] tmp = getAddress();
        result += Utils.replace((tmp.length > 0 ? tmp[0] : "") + formatExtraData(), "\n", "|") + "\n";
        
        //регион подачи
        result += Utils.replace(region, "\n", "|") + "\n";
        
        //адреса куда ехать
        for (int i = 1; i < tmp.length; ++i)
        {
            result += Utils.replace(tmp[i], "\n", "|") + "|";
        }
        result += "\n";
        
        //класс заказа
        result += Utils.replace(getAutoClass(), "\n", "|") + "\n"; 

        //Cтоимость заказа 
        if (fare >= 0)
        {
            result += Double.toString(fare) + " грн";
            String bonusSumStr = getBonusSum();
            if (!bonusSumStr.equals("") && getStatus() != STATE_NEW)
            {
                result += " в офисе " + bonusSum + " грн";
            }
            result += "\n";
        }
        else
        {
            result += "Без суммы\n";
        }

        //Примечание
        result += Utils.replace(comments, "\n", "|") + "\n";
        
        //Доп услуги
        result += Utils.replace(getFeatures(), "\n", "|") + "\n";
        
        //Статус заказа
        result += statusStr + "\n";
        
        //Время
        result += Utils.dateToTimeString(getDate()) + "\n";
        
        //ID Заказа
        if (statusStr.equals("Отмененный")) {
            result += "\n"; 
        } else {
            result += getOrderID() + "\n"; 
        }
        
        //Имя Диспетчера        
        result += Utils.replace(getDispatcherName(), "\n", "|") + "\n";
                
        return result;
    }
    
    public String getDetailsText(boolean fullData, String type) 
    {
        String result = "";

        if (!type.equals(""))
        {
            result += (type+'\n');
        }
         
        //Если для Черновцов
        if (ViewManager.getViewManager().getFunctionMenuType() == FunctionMenu.CHERNOVTSI_TYPE)
        {
            return getChernovtsiDetailsText();
        }
        
        //Если короткий заказ для донецка - особый формат
        if (ViewManager.getViewManager().getFunctionMenuType() == FunctionMenu.DONETSK_TYPE && (!Settings.getSettings().isFullOrder()))
        {
            return getDonetskShortDetailsText();
        }
        
        //[время]([цена])[улица]д[дом],п[парадная],кв[квартира]>[следующий адрес]\[примечания]
        String AutoTariffClassUIDStr = "";
        if (ViewManager.getViewManager().getFunctionMenuType() == FunctionMenu.CHERNOVTSI_TYPE)
        {
            AutoTariffClassUIDStr = "[Кл." + getAutoTariffClassUID() +  "]";

        }
        //Префикс партнера и Дата
        String tmp = formatPreffix(getPartnerPreffix());
        if (fullData)
        {
            tmp += (Utils.dateToString(getDate()) + "(");
        }
        else
        {
            tmp += (Utils.dateToTimeString(getDate()) + "(");
        }
        
        //цена
        if (fare>=0)
        {
            tmp += Double.toString(fare);
            String bonusSumStr = getBonusSum();
            if (!bonusSumStr.equals("") && getStatus() != STATE_NEW)
            {
                tmp += " в офисе " + bonusSum + " грн";
            }
            tmp +=")";
        }
        else
        {
                tmp += "без суммы)";
        }
        
        tmp += AutoTariffClassUIDStr;
        
        //Адреса
        String[] temp = getAddress();
        for (int j=0;j<temp.length;j++)
        {
            tmp += temp[j];
            if (j==0)
            {
                String tempStr = "";
                //Строение
                tempStr = getBuilding();
                if (!tempStr.equals(""))
                {
                    if (Utils.isNumber(tempStr.charAt(0)))
                    {
                        tmp += ",корп" + tempStr;
                    }
                    else
                    {
                        tmp += ","+tempStr;
                    }
                }
                
                //Парадная
                tempStr = getParade();
                if (!tempStr.equals(""))
                {
                    if (Utils.isNumber(tempStr.charAt(0)))
                    {
                        tmp += ",п" + tempStr;
                    }
                    else
                    {
                        tmp += "," + tempStr;
                    }
                }
                //Квартира
                tempStr = getFlat();
                if (!tempStr.equals(""))
                {
                    if (Utils.isNumber(tempStr.charAt(0)))
                    {
                        tmp += ",кв" + tempStr;
                    }
                    else
                    {
                        tmp += ","+tempStr;
                    }
                }

                //Регион
                String strRegion = getRegion();
                if (!strRegion.equals(""))
                {
                    tmp += "(" + strRegion + ")";
                }
            }
            
            if (j < temp.length-1)
            {
                    tmp += ">";
            }
        }
        //Коментарии
        tmp += "\\" + getComments();
        
        result = tmp + "\\" + folder + '\n';
        
        if (Settings.getSettings().isFullOrder())
        {
            result += ("Дата : " + Utils.dateToDateString(getDate()) + '\n');
            //Для черновцов не показываем тип клиента, но показываем Дополнительные услуги
            if (ViewManager.getViewManager().getFunctionMenuType() == FunctionMenu.CHERNOVTSI_TYPE)
            {
                //result += ("Доп. услуги : " + !!! + '\n');
            }
            else
            {
                result += ("Тип клиента : " + getClientTypeString() + '\n');
            }
            if (Settings.getSettings().isShowPhone())
            {
                if (getPhoneNumber().equals(""))
                {
                    result += "Тел.: нет\n";
                }
                else
                {
                    result += ("Тел. : " + getPhoneNumber() + "\n");
                }
            }
            result += ("Имя диспетчера : " + getDispatcherName() + '\n');
            result += ("ID заказа : " + Integer.toString(getOrderID()) + '\n');
        }
        
        return result;
    }
 
    protected String getDonetskShortDetailsText()
    {
        //Время
        String result = Utils.dateToTimeString(getDate()) + "\n";
        
        //Адреса
        String[] temp = getAddress();
        for (int j=0;j<temp.length;j++)
        {
            result += temp[j];
            if (j==0)
            {
                String tempStr = "";
                //Строение
                tempStr = getBuilding();
                if (!tempStr.equals(""))
                {
                    if (Utils.isNumber(tempStr.charAt(0)))
                    {
                        result += ",корп" + tempStr;
                    }
                    else
                    {
                        result += ","+tempStr;
                    }
                }
                
                //Парадная
                tempStr = getParade();
                if (!tempStr.equals(""))
                {
                    if (Utils.isNumber(tempStr.charAt(0)))
                    {
                        result += ",п" + tempStr;
                    }
                    else
                    {
                        result += "," + tempStr;
                    }
                }
                //Квартира
                tempStr = getFlat();
                if (!tempStr.equals(""))
                {
                    if (Utils.isNumber(tempStr.charAt(0)))
                    {
                        result += ",кв" + tempStr;
                    }
                    else
                    {
                        result += ","+tempStr;
                    }
                }

                //Регион
                String strRegion = getRegion();
                if (!strRegion.equals(""))
                {
                    result += "(" + strRegion + ")";
                }
            }
            
            if (j < temp.length-1)
            {
                    result += ">";
            }
        }
        
        result += "\n";
        
        //Примечание
        result += getComments() + "\n";

        //Телефон заказчика
        if (getPhoneNumber().equals(""))
        {
            result += "Тел.: нет\n";
        }
        else
        {
            result += ("Тел. : " + getPhoneNumber() + "\n");
        }
                
        return result;        
    }
    
    public String getReportDescription()
    {
        String result = getOrderID() + ") ";
        result += getDate() + " - ";
        result += getFare();
        
        return result;
    }
    
    public String getFeatures()
    {
        return "";
    }
    
    protected String formatPreffix(String value)
    {
        if (!value.equals(""))
        {
            return ("[" + value + "]");
        }
        else
        {
            return "";
        }
    }
    
    public void copy(Order src) 
    {
        setClientType(src.getClientType());//��� �������
        setDate(src.getDate());//���� ������
        setFare(src.getFare());//���� �������
        setDispatcherName(src.getDispatcherName());//��� ����������
        setPhoneNumber(src.getPhoneNumber());//������� ���������
        setAddress(src.getAddressCount(), src.getRawAdress());
        setComments(src.getComments());
        setRegion(src.getRegion());
        setFlat(src.getFlat());
        setParade(src.getParade());
        setBuilding(src.getBuilding());
        setPartnerPreffix(src.getPartnerPreffix());
        bonusSum = src.bonusSum;
    }
}
